Foreign trade


Foreign trade
IEX2PROD_raw <- 
  statgl_url("IEX2PROD", lang = language) %>% 
  statgl_fetch(
    branch = px_all(),
    quarter = 1:4,
    time = px_top(1),
    .col_code = TRUE
  ) %>% 
  as_tibble()

IEX2PROD <- 
  IEX2PROD_raw %>% 
  mutate(branch = branch %>% fct_inorder()) %>% 
  filter(branch %>% str_detect("-[:digit:]")) %>% 
  mutate(
    quarter = quarter %>% fct_inorder(),
    branch = branch %>% str_remove_all("[:digit:]|[:punct:]") %>% trimws(),
    branch = branch %>% fct_inorder()
    ) %>% 
  filter(value != "Na") %>% 
  spread(quarter, value)

IEX2PROD %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEX2PROD[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
quarter 1 quarter 2 quarter 3 quarter 4
2023
Exports total 1.070.761.570 1.491.901.632 1.963.571.249 1.485.223.302
Agricultural products of animals origin total 25.123 76.303 103.020 56.754
Agricultural products of vegetable origin total NA NA 5.029 NA
Manufactures goods total 206.595.114 330.165.655 353.558.676 275.617.223
Ships of more than GT aircraft and drilling rigs and production platforms total NA NA 260.500 NA
Fish crustaceans and molluscs not prepared or preserved total 863.792.549 1.144.397.182 1.608.211.599 1.208.980.012
Fuels lubricant and current total 2.179 1.605 10.160 2.753
Other goods total 346.605 17.260.887 1.422.265 566.560


See the table in our Statbank: IEX2PROD

IEXANV_raw <- 
  statgl_url("IEXANV", lang = language) %>%
  statgl_fetch(
    quarter   = 1:4,
    time      = px_top(1),
    "end-use" = px_all(),
    .col_code = TRUE
  ) %>% 
  as_tibble()

IEXANV <- 
  IEXANV_raw %>% 
  filter(`end-use` %>% word(1) %>% str_detect("-")) %>% 
  mutate(
    `end-use` = `end-use` %>% str_remove_all("[:digit:]|[:punct:]") %>% trimws(),
    `end-use` = `end-use` %>% fct_inorder()
  ) %>% 
  filter(value != "Na") %>% 
  spread(quarter, value)
  
IEXANV %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEXANV[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
quarter 1 quarter 2 quarter 3 quarter 4
2023
Imports total 1.098.101.623 1.993.478.311 1.460.991.973 1.686.377.300
Commodities for use in aggriculture and farming total 11.479.086 12.860.143 23.605.406 22.101.887
Commodities for use in other businesses total 173.161.848 282.152.923 200.127.923 161.592.051
Commodities for use in building and construction total 263.428.312 380.866.390 371.512.583 329.639.197
Fuels and lubricants total 27.068.937 461.614.960 14.647.444 237.513.718
Machinery total 121.218.387 179.381.568 137.565.023 188.830.941
Transport equipments total 33.119.002 76.145.552 45.741.542 83.019.274
Commodities for final use total 444.686.187 558.153.857 643.938.547 648.029.145
Goods not elsewhere specified total 23.939.865 42.302.919 23.853.504 15.651.087


See the table in our Statbank: IEXANV

IEXBALMND_raw <- 
  statgl_url("IEXBALMND", lang = language) %>%
  statgl_fetch(
    month       = px_all(),
    transaction = px_all(),
    time        = px_top(1),
    .col_code   = TRUE
  ) %>% 
  as_tibble()

IEXBALMND <- 
  IEXBALMND_raw %>% 
  mutate(
    month = month %>% str_to_sentence(),
    month = month %>% fct_inorder(),
    transaction = transaction %>% fct_inorder()
  ) %>% 
  filter(value != "Na") %>% 
  spread(transaction, value)

IEXBALMND %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEXBALMND[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
Balance Export Import
2023
Whole year -227.491 6.011.458 6.238.949
January 15.380 338.317 322.936
February 2.895 346.400 343.504
March -45.616 386.045 431.661
April -308.853 302.821 611.673
May 45.493 665.180 619.688
June -238.217 523.901 762.117
July 124.410 643.644 519.234
August 317.304 767.949 450.645
September 60.865 551.979 491.113
October -354.770 493.649 848.418
November 64.395 559.330 494.935
December 89.220 432.245 343.024


See the table in our Statbank: IEXBALMND

IEXSITC_raw <- 
  statgl_url("IEXSITC", lang = language) %>% 
  statgl_fetch(
    processing  = px_all(),
    transaction = 1:2,
    time        = px_top(2),
    .col_code   = TRUE
  ) %>% 
  as_tibble() %>% 
  filter(time != max(time))

IEXSITC <- 
  IEXSITC_raw %>% 
  filter(processing %>% str_detect("I alt|i alt|Katillugit|katillugit|total|Total")) %>%
  mutate(
      processing = processing %>% 
      str_remove_all("[:digit:]|\\-") %>% 
      trimws() %>% 
      fct_inorder(),
      value = value |> prettyNum(big.mark = ".", decimal.mark = ",")
    ) %>% 
  spread(transaction, value) %>% 
  mutate_if(is.numeric, ~replace(., is.na(.), 0)) %>%
  gather(var, val, -c(processing, time)) %>% 
  mutate(var = var %>% str_to_title()) %>% 
  spread(var, val)


IEXSITC %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table(replace_0s = TRUE) %>% 
  pack_rows(index = table(paste0("Kroner, ", IEXSITC %>% pull(time)))) %>% 
  row_spec(1, bold = TRUE)
Export Import
Kroner, 2022
Total 6.074.965.766 7.340.662.485
Provisions and livestock, total 5.836.940.972 1.056.407.397
Alcoholic beverages and tobacco, total 308.746 203.629.659
Raw materials, inedible, total 11.906.983 55.249.242
Mineral fuels and lubricants etc., total 4.120 1.450.555.164
Animal or vegetable fats and oils, total 3.298.396 8.080.838
Chemicals and chemical products, total 1.082.966 440.611.951
Manufactured products mainlysemimanufactured products, total 16.419.591 1.065.683.956
Machinery and transport equipment, total 179.201.166 2.346.499.594
Manufactured products, total 16.185.340 635.428.213
Miscellaneous articles and transactions, total 9.617.486 78.516.470


See the table in our Statbank: IEXSITC


Last updated: 17. april 2024
LS0tDQpwYXJhbXM6DQogIGxhbmc6ICJkYSINCm91dHB1dDoNCiAgc3RhdGdsOjpzdGF0Z2xfcmVwb3J0Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gICAgPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJY2xhc3Mub3V0cHV0ID0gInNjcm9sbC0xMDAiDQopDQoNCnsNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJzdGF0Z2wiKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgieWFtbCIpDQp9DQoNCnsgIA0KbGFuZ3VhZ2UgIDwtIHBhcmFtcyRsYW5nDQpvcHRpb24gICAgPC0gcGFzdGUwKCI/bGFuZz0iLCBsYW5ndWFnZSwgIiZzZWxlY3QiKQ0KbG9nbyAgICAgIDwtIHBhc3RlMChnZXR3ZCgpLCIvYWRkL2xvZ28uZ2lmIikNCnR4dCAgICAgICA8LSByZWFkX3lhbWwocGFzdGUwKGdldHdkKCksICIvYWRkL3R4dC55bWwiKSwgZmlsZUVuY29kaW5nID0gIklTTy04ODU5LTEiKQ0Kc291cmNlICAgIDwtIHR4dCRzb3VyY2VbbGFuZ3VhZ2VdICU+JSB1bmxpc3QoKQ0KfQ0KDQp4YXJpbmdhbkV4dHJhOjp1c2VfY2xpcGJvYXJkKCkNCg0KYGBgDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCg0KLmFjY29yZGlvbiB7DQogIGJhY2tncm91bmQtY29sb3I6ICM5MTk5MDA7DQogIGNvbG9yOiB3aGl0ZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBwYWRkaW5nOiAxOHB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYm9yZGVyOiBub25lOw0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIG91dGxpbmU6IG5vbmU7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgdHJhbnNpdGlvbjogMC40czsNCn0NCg0KLmFjdGl2ZSwgLmFjY29yZGlvbjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOTcyNDI7DQp9DQoNCi5hY2NvcmRpb246YWZ0ZXIgew0KICBjb250ZW50OiAnXDAwMkInOw0KICBjb2xvcjogIzc3NzsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZsb2F0OiByaWdodDsNCiAgbWFyZ2luLWxlZnQ6IDVweDsNCn0NCg0KLmFjdGl2ZTphZnRlciB7DQogIGNvbnRlbnQ6ICJcMjIxMiI7DQp9DQoNCi5wYW5lbCB7DQogIHBhZGRpbmc6IDBweCA1cHggMHB4IDVweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQogIG1heC1oZWlnaHQ6IDA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4ycyBlYXNlLW91dDsNCn0NCg0KZGV0YWlscyB7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQpkZXRhaWxzID4gc3VtbWFyeSB7DQogIHBhZGRpbmc6IDRweCAxMnB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2Y5OTsNCiAgYm9yZGVyOiBzb2xpZDsNCiAgYm9yZGVyLWNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgY29sb3I6IHdoaXRlOw0KfQ0KDQpkZXRhaWxzW29wZW5dID4gc3VtbWFyeSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmYWE0MWE7DQp9DQoNCg0KLnRpdGxlIHsNCiAgY29sb3I6ICMxYjU0NjM7DQogIGZvbnQtc2l6ZTogMzZweDsNCn0NCg0KDQoucGVyc29uZXIgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwNDQ1OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMC4xcHg7DQogIHBhZGRpbmctYm90dG9tOiAxcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQouw7hrb25vbWkgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwN0Y5OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMC4xcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQoudHbDpnJnw6VlbmRlIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICNmYWE0MWE7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDAuMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLmNvbnRhaW5lciB7DQogIHdpZHRoOiBpbmhlcml0Ow0KfQ0KDQouc2Nyb2xsLTEwMCB7DQogIG1heC1oZWlnaHQ6IDEwMDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsNCn0NCg0KDQpwcmUgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCn0NCg0KcHJlW2NsYXNzXSB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KfQ0KDQpgYGANCg0KPGJyPg0KPGJyPg0KDQo8Y2VudGVyPg0KDQotLS0NCiANCiMgW2ByIHR4dCRJRSR0aXRsZVtsYW5ndWFnZV1gXXsudGl0bGV9DQogDQotLS0NCjwvY2VudGVyPg0KDQo8ZGV0YWlscyBvcGVuPiA8c3VtbWFyeT4gYHIgdHh0JElFJHRpdGxlW2xhbmd1YWdlXWAgPC9zdW1tYXJ5PiANCjxicj4NCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAxOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIklFWDJQUk9EIiwgbGFuZyA9IGxhbmd1YWdlKSlbMV0kdGl0bGUpIGAgPC9idXR0b24+IDxkaXYgY2xhc3M9InBhbmVsIj4NCmBgYHtyIElFWDJQUk9EfQ0KDQpJRVgyUFJPRF9yYXcgPC0gDQogIHN0YXRnbF91cmwoIklFWDJQUk9EIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUgDQogIHN0YXRnbF9mZXRjaCgNCiAgICBicmFuY2ggPSBweF9hbGwoKSwNCiAgICBxdWFydGVyID0gMTo0LA0KICAgIHRpbWUgPSBweF90b3AoMSksDQogICAgLmNvbF9jb2RlID0gVFJVRQ0KICApICU+JSANCiAgYXNfdGliYmxlKCkNCg0KSUVYMlBST0QgPC0gDQogIElFWDJQUk9EX3JhdyAlPiUgDQogIG11dGF0ZShicmFuY2ggPSBicmFuY2ggJT4lIGZjdF9pbm9yZGVyKCkpICU+JSANCiAgZmlsdGVyKGJyYW5jaCAlPiUgc3RyX2RldGVjdCgiLVs6ZGlnaXQ6XSIpKSAlPiUgDQogIG11dGF0ZSgNCiAgICBxdWFydGVyID0gcXVhcnRlciAlPiUgZmN0X2lub3JkZXIoKSwNCiAgICBicmFuY2ggPSBicmFuY2ggJT4lIHN0cl9yZW1vdmVfYWxsKCJbOmRpZ2l0Ol18WzpwdW5jdDpdIikgJT4lIHRyaW13cygpLA0KICAgIGJyYW5jaCA9IGJyYW5jaCAlPiUgZmN0X2lub3JkZXIoKQ0KICAgICkgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gIk5hIikgJT4lIA0KICBzcHJlYWQocXVhcnRlciwgdmFsdWUpDQoNCklFWDJQUk9EICU+JSANCiAgc2VsZWN0KC10aW1lKSAlPiUgDQogIHJlbmFtZSgiICIgPSAxKSAlPiUgDQogIHN0YXRnbF90YWJsZSgpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gSUVYMlBST0RbWyJ0aW1lIl1dICU+JSB0YWJsZSgpKSAlPiUgDQogIHJvd19zcGVjKDEsIGJvbGQgPSBUUlVFKQ0KDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiSUVYMlBST0QiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzI2YzE1NDA2LWRiN2EtNGM5NS05ZDBmLWQzZDYzYTkzZGEzZSIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQoNCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMjogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJJRVhBTlYiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KDQpgYGB7ciBJRVhBTlZdfQ0KDQpJRVhBTlZfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJJRVhBTlYiLCBsYW5nID0gbGFuZ3VhZ2UpICU+JQ0KICBzdGF0Z2xfZmV0Y2goDQogICAgcXVhcnRlciAgID0gMTo0LA0KICAgIHRpbWUgICAgICA9IHB4X3RvcCgxKSwNCiAgICAiZW5kLXVzZSIgPSBweF9hbGwoKSwNCiAgICAuY29sX2NvZGUgPSBUUlVFDQogICkgJT4lIA0KICBhc190aWJibGUoKQ0KDQpJRVhBTlYgPC0gDQogIElFWEFOVl9yYXcgJT4lIA0KICBmaWx0ZXIoYGVuZC11c2VgICU+JSB3b3JkKDEpICU+JSBzdHJfZGV0ZWN0KCItIikpICU+JSANCiAgbXV0YXRlKA0KICAgIGBlbmQtdXNlYCA9IGBlbmQtdXNlYCAlPiUgc3RyX3JlbW92ZV9hbGwoIls6ZGlnaXQ6XXxbOnB1bmN0Ol0iKSAlPiUgdHJpbXdzKCksDQogICAgYGVuZC11c2VgID0gYGVuZC11c2VgICU+JSBmY3RfaW5vcmRlcigpDQogICkgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gIk5hIikgJT4lIA0KICBzcHJlYWQocXVhcnRlciwgdmFsdWUpDQogIA0KSUVYQU5WICU+JSANCiAgc2VsZWN0KC10aW1lKSAlPiUgDQogIHJlbmFtZSgiICIgPSAxKSAlPiUgDQogIHN0YXRnbF90YWJsZSgpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gSUVYQU5WW1sidGltZSJdXSAlPiUgdGFibGUoKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkNCiAgDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIklFWEFOViIpYF0oYHIgcGFzdGUwKCJodHRwczovL2Jhbmsuc3RhdC5nbDo0NDMvc3EvYjBiOTUyZDEtNmVhOS00MTNlLWE5YTMtZDNjN2ZhNWFlNjEzIiwgb3B0aW9uKWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2PiANCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMzogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJJRVhCQUxNTkQiLCBsYW5nID0gbGFuZ3VhZ2UpKSR0aXRsZSlgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIElFWEJBTE1ORH0NCg0KSUVYQkFMTU5EX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiSUVYQkFMTU5EIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUNCiAgc3RhdGdsX2ZldGNoKA0KICAgIG1vbnRoICAgICAgID0gcHhfYWxsKCksDQogICAgdHJhbnNhY3Rpb24gPSBweF9hbGwoKSwNCiAgICB0aW1lICAgICAgICA9IHB4X3RvcCgxKSwNCiAgICAuY29sX2NvZGUgICA9IFRSVUUNCiAgKSAlPiUgDQogIGFzX3RpYmJsZSgpDQoNCklFWEJBTE1ORCA8LSANCiAgSUVYQkFMTU5EX3JhdyAlPiUgDQogIG11dGF0ZSgNCiAgICBtb250aCA9IG1vbnRoICU+JSBzdHJfdG9fc2VudGVuY2UoKSwNCiAgICBtb250aCA9IG1vbnRoICU+JSBmY3RfaW5vcmRlcigpLA0KICAgIHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24gJT4lIGZjdF9pbm9yZGVyKCkNCiAgKSAlPiUgDQogIGZpbHRlcih2YWx1ZSAhPSAiTmEiKSAlPiUgDQogIHNwcmVhZCh0cmFuc2FjdGlvbiwgdmFsdWUpDQoNCklFWEJBTE1ORCAlPiUgDQogIHNlbGVjdCgtdGltZSkgJT4lIA0KICByZW5hbWUoIiAiID0gMSkgJT4lIA0KICBzdGF0Z2xfdGFibGUoKSAlPiUgDQogIHBhY2tfcm93cyhpbmRleCA9IElFWEJBTE1ORFtbInRpbWUiXV0gJT4lIHRhYmxlKCkpICU+JSANCiAgcm93X3NwZWMoMSwgYm9sZCA9IFRSVUUpDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiSUVYQkFMTU5EIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS9hOGYxNjE4Ni03NGIzLTQyNGQtYWVmZi0xNjdhNjJkZTQ5ZWYiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+IA0KDQoNCg0KPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uIj4gYHIgcGFzdGUwKCIqKlRhYmVsIDQ6ICoqIiwgc3RhdGdsX21ldGEoc3RhdGdsX3VybCgiSUVYU0lUQyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIElFWFNJVEN9DQoNCklFWFNJVENfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJJRVhTSVRDIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUgDQogIHN0YXRnbF9mZXRjaCgNCiAgICBwcm9jZXNzaW5nICA9IHB4X2FsbCgpLA0KICAgIHRyYW5zYWN0aW9uID0gMToyLA0KICAgIHRpbWUgICAgICAgID0gcHhfdG9wKDIpLA0KICAgIC5jb2xfY29kZSAgID0gVFJVRQ0KICApICU+JSANCiAgYXNfdGliYmxlKCkgJT4lIA0KICBmaWx0ZXIodGltZSAhPSBtYXgodGltZSkpDQoNCklFWFNJVEMgPC0gDQogIElFWFNJVENfcmF3ICU+JSANCiAgZmlsdGVyKHByb2Nlc3NpbmcgJT4lIHN0cl9kZXRlY3QoIkkgYWx0fGkgYWx0fEthdGlsbHVnaXR8a2F0aWxsdWdpdHx0b3RhbHxUb3RhbCIpKSAlPiUNCiAgbXV0YXRlKA0KICAgICAgcHJvY2Vzc2luZyA9IHByb2Nlc3NpbmcgJT4lIA0KICAgICAgc3RyX3JlbW92ZV9hbGwoIls6ZGlnaXQ6XXxcXC0iKSAlPiUgDQogICAgICB0cmltd3MoKSAlPiUgDQogICAgICBmY3RfaW5vcmRlcigpLA0KICAgICAgdmFsdWUgPSB2YWx1ZSB8PiBwcmV0dHlOdW0oYmlnLm1hcmsgPSAiLiIsIGRlY2ltYWwubWFyayA9ICIsIikNCiAgICApICU+JSANCiAgc3ByZWFkKHRyYW5zYWN0aW9uLCB2YWx1ZSkgJT4lIA0KICBtdXRhdGVfaWYoaXMubnVtZXJpYywgfnJlcGxhY2UoLiwgaXMubmEoLiksIDApKSAlPiUNCiAgZ2F0aGVyKHZhciwgdmFsLCAtYyhwcm9jZXNzaW5nLCB0aW1lKSkgJT4lIA0KICBtdXRhdGUodmFyID0gdmFyICU+JSBzdHJfdG9fdGl0bGUoKSkgJT4lIA0KICBzcHJlYWQodmFyLCB2YWwpDQoNCg0KSUVYU0lUQyAlPiUgDQogIHNlbGVjdCgtdGltZSkgJT4lIA0KICByZW5hbWUoIiAiID0gMSkgJT4lIA0KICBzdGF0Z2xfdGFibGUocmVwbGFjZV8wcyA9IFRSVUUpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gdGFibGUocGFzdGUwKCJLcm9uZXIsICIsIElFWFNJVEMgJT4lIHB1bGwodGltZSkpKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkNCiAgDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIklFWFNJVEMiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxL2NlYjliNGEwLTNlZmQtNGQ2YS04NWQ1LTFhMjZmYWIxMmY4MyIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQo8L2RldGFpbHM+DQoNCg0KDQo8aHIgc3R5bGU9ImJvcmRlcjoxcHggcmlkZ2UgbGlnaHRncmF5Ij4gPC9ocj4NCjxjZW50ZXI+IDxzcGFuIHN0eWxlPSdjb2xvcjojRDNEM0QzOyBmb250LXNpemU6OTAlOyc+IGByIHBhc3RlKHR4dCR1cGRhdGVbbGFuZ3VhZ2VdLCBmb3JtYXQoU3lzLkRhdGUoKSwgIiVkLiAlQiAlWSIpKWAgPC9zcGFuPiA8L2NlbnRlcj4NCg0KDQo8c2NyaXB0Pg0KdmFyIGFjYyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImFjY29yZGlvbiIpOw0KdmFyIGk7DQoNCmZvciAoaSA9IDA7IGkgPCBhY2MubGVuZ3RoOyBpKyspIHsNCiAgYWNjW2ldLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKSB7DQogICAgdGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsNCiAgICB2YXIgcGFuZWwgPSB0aGlzLm5leHRFbGVtZW50U2libGluZzsNCiAgICBpZiAocGFuZWwuc3R5bGUubWF4SGVpZ2h0KSB7DQogICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOw0KICAgIH0gZWxzZSB7DQogICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSBwYW5lbC5zY3JvbGxIZWlnaHQgKyAicHgiOw0KICAgIH0gDQogIH0pOw0KfQ0KPC9zY3JpcHQ+DQoNCg0K